package com.chmingx.boot.config;

import com.chmingx.boot.bean.Car;
import com.chmingx.boot.bean.Pet;
import com.chmingx.boot.bean.User;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 将普通类转换为配置类，用来取代之前的Beans.xml, 在配置类中通过注解@Bean，给容器添加组件
 * proxyBeanMethods = true, Full模式，保证每个@Bean方法被调用多少此返回的组件都是单例的, 默认的, 底层通过代理模式获取MyConfig的代理类，然后再创建对象
 * proxyBeanMethods = false, Lite模式，保证每个@Bean方法被调用多少此返回的组件都是新创建的, 底层就是用MyConfig创建对象，没有生成代理类
 *
 * 配置类本身也是组件
 */
@Configuration(proxyBeanMethods = true)
//@EnableConfigurationProperties(Car.class)
public class MyConfig {

    /**
     * 给容器中添加组件,
     * 方法名 --> 组件id
     * 返回值类型 --> 组件类型
     * 返回值 --> 组件在容器中的实例
     * @return
     */
    @Bean
    public Pet pet() {
        return new Pet("miaomiao~");
    }

    @Bean
    public User user() {
        return new User("zhangsan", 18, pet());
    }
}
